<?php

namespace app\common\service;

use think\Cache;

class Shop
{
    protected $key = 'SHOP_STATUS';
    protected $localCacheExpire = 300; // 本地缓存过期时间（秒），如5分钟

    /**
     * 获取当前状态
     * @return int 0=打烊，1=营业中
     */
    public function getStatus(): int
    {
        // 1.先查本地缓存
        $localStatus =  Cache::get($this->key);
        if (false !== $localStatus) {
            return (int)$localStatus;
        }

        // 2.本地缓存无,查redis
        $redisStatus =  Cache::store('redis')->get($this->key, 0);

        // 3.将redis结果写入本地缓存
        Cache::set($this->key, $redisStatus, $this->localCacheExpire);

        return  $redisStatus;
    }

    /**
     * 设置营业状态（更新Redis + 清除本地缓存）
     */
    public function setStatus(int $status): bool
    {
        if (!ShoppingStatus::isShoppingValid($status)) {
            throw new \InvalidArgumentException('无效的状态值');
        }

        // 1. 更新Redis
        $redisResult = Cache::store('redis')->set($this->key, $status);
        if ($redisResult) {
            // 2. 清除本地缓存（确保下次读取时从Redis拉取最新值）
            Cache::rm($this->key);
            // 可选：直接更新本地缓存（避免等待过期）
            // Cache::set($this->localCacheKey, $status, $this->localCacheExpire);
        }
        return $redisResult;
    }
}
